#ifndef __WIZ_ALGEBRA_ROTATOR_BASE_HPP__SHANHAOBO_19800429__
#define __WIZ_ALGEBRA_ROTATOR_BASE_HPP__SHANHAOBO_19800429__

namespace Wiz
{
    namespace Rotator
    {
        namespace Base
        {
#       pragma pack(push, 1)
            struct Type
            {
                ////////////////////////////////////////////////////////////////
                enum
                {
                    eCount = 3
                };
                ////////////////////////////////////////////////////////////////
                typedef ::Wiz::Int32::Type      tElement;
                typedef Type<tElement>          tThis;
                typedef tElement                tElementArray[eCount];
                ////////////////////////////////////////////////////////////////
                union
                {
                    struct
                    {
                        tElement                Pitch; // Looking up and down (0=Straight Ahead, +Up, -Down).
                        tElement                Yaw;   // Rotating around (running in circles), 0=East, +North, -South.
                        tElement                Roll;  // Rotation about axis of screen, 0=Straight, +Clockwise, -CCW.
                    };
                    struct
                    {
                        tElement                x, y, z;
                    };
                    struct
                    {
                        tElement                e0, e1, e2;
                    };
                    struct
                    {
                        tElement                e[eCount];
                    };
                    struct
                    {
                        tElementArray           v;
                    };
                };
                ////////////////////////////////////////////////////////////////
                Type()
                {}
                Type(const tElement& InX, const tElement& InY, const tElement& InZ)
                {
                    this->x = InX;
                    this->y = InY;
                    this->z = InZ;
                }
                Type(const tElement& InEle) 
                {
                    this->x = InEle;
                    this->y = InEle;
                    this->z = InEle;
                }
                Type(tThisIn InOther)
                {
                    this->x = InOther.x;
                    this->y = InOther.y;
                    this->z = InOther.z;
                }
                ////////////////////////////////////////////////////////////////
            };
#       pragma pack(pop)
        } /// end of namespace Base
    } /// end of namespace Rotator
} /// end of namespace Wiz

#endif /*__WIZ_ALGEBRA_ROTATOR_BASE_HPP__SHANHAOBO_19800429__*/
